﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Kurogane.Compiler;
using System.IO;
using Kurogane.Runtime;

namespace ConsoleTest {
	class Program {
		static void Main(string[] args) {
			LoopTest();
		}

		static void Test() {
			var engine = new Engine();

			//string greet = "「こんにちは 世界」 を[表示]する。[挨拶]を[表示]する。";
			//engine.Execute(greet);

			var def = "「こんにちは」を[挨拶文]とする。";
			engine.Execute(def);
			var print = "[挨拶文]を[表示]する。";
			engine.Execute(print);
		}

		static void LoopTest() {
			string code = @"
以下の手順で[彼]に[挨拶]する。
	以下の手順で[昼の挨拶]する。
		「こんにちは，」を[出力]する。
	以上。
	[昼の挨拶]する。
	[彼]を[改行出力]する。
以上。
「山田さん」に[挨拶]する。
";
			var engine = new Engine();
			engine.Execute(code);
		}

		static void GreetTest() {
			//Test(); return;
			string code = @"
以下の手順で[彼]に[挨拶]する。
	「こんにちは、」を[出力]する。
	[彼]を[出力]する。
	「。」を[改行出力]する。
以上。
「山田さん」に[挨拶]する。
";
			var engine = new Engine();
			engine.Execute(code);
		}

		static void IfTest() {
			var code = @"
もし(1<2)なら
	「正しい」を[表示]する。
他なら
	「間違い」を[表示]する。
";
			var lex = new Lexer(new StringReader(code));
			while (lex.MoveNext())
				Console.WriteLine(lex.Current);
		}

		static void FibTest() {
			var fibs = @"
以下の手順で[N]を[FB変換]する。
　　もし([N]≦1)なら
　　　　[N]を[返す]。
　　他なら
　　　　(([N] - 1)を[FB変換]したもの + ([N] - 2)を[FB変換]したもの)を[返す]。
以上。
";
			var parser = new Parser(new Lexer(new StringReader(fibs)));
			var ast = parser.Parse();
		}
	}
}
